Kubernetes® is a system for automating deployment, scaling, and management of containerized applications. Application containerization is a virtualization method used by operating systems to deploy and run distributed applications without launching an entire virtual machine for each application.
Containerized applications have advantages over standard applications. When a standard application is installed on a server, libraries required by the application are also installed. Thus, if multiple applications are installed, the libraries on the server are an amalgamation of the libraries required by each of the multiple applications. If one application installs a different version of a library used by another application, the first installed version is overwritten. As a result, an application may use a version of a library that was not tested with the application, which may further result in unexpected behavior.
One solution to this problem is to run each application in a virtual machine that only has the operating system and the application installed. This ensures that different applications will not cause problems for each other. However, virtual machines have substantial overhead associated with them. As a result, to achieve the same performance as with a standard, non-virtual, deployment, additional or higher-performing computing hardware will be required, increasing costs.
Kubernetes® provides another solution in the form of containerized applications. Each container comprises an application and its libraries, but the containers are installed and managed with much less overhead than virtual machines.
Traditionally, software is written to be deployed on special target platforms and environments (e.g., a Linux operating system with particular machines installed on-premise). Modernly, however, this type of software deployment has changed. Specifically, cloud deployments of applications have become more popular, where an application is installed on cloud servers and users access the cloud services to access and run the applications as services. This creates a challenge when it comes to scalability. When an application is launched, however, there may only be ten users operating it, but within a short amount of time that number can increase to thousands of users. Additionally, there may be some periods where a large number of users access the application while at other times a smaller number of users access the application, creating wild swings in usage, even within a single day.
Furthermore, often the software itself is so complex that it is developed by several companies using hundreds of developers. This can make it challenging to provide patches of the applications, as well as customizations, extensions, and other modifications.
Providing all of these features in a highly specific application would not scale.